#ifndef __COLOR_H__
#define __COLOR_H__

#include <GL/glut.h>

#include "CoordF.h"

typedef GLfloat vec4[4];

/*
 * Classe: Color
 *
 *   Representa cada uma das sete cores das bolinhas no jogo
 *
*/

class Color 
{
      private:
              vec4 rgba;
      public:
             static const GLfloat mainColors[][4];
             enum colorNames { RED, GREEN, BLUE, YELLOW, PURPLE, BLACK, WHITE };
             
             Color() { setColor(Color::WHITE); }
             Color(const vec4 vec) { setColor(vec); }
             Color(CoordF c) { setColor(c); }
             Color(GLfloat x, GLfloat y, GLfloat z) { setColor(x, y, z); }
             Color(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { setColor(x, y, z, w); }
             Color(int ix) { setColor(ix); }
             ~Color() {};

             void setColor(const vec4 vec) { for (int i=0;i<4;i++) rgba[i] = vec[i]; }                          
             void setColor(CoordF c) { for (int i=0;i<3;i++) rgba[i] = c[i]; rgba[3] = 1.0; }
             void setColor(GLfloat x, GLfloat y, GLfloat z) { rgba[0] = x; rgba[1] = y; rgba[2] = z; rgba[3] = 1.0; }
             void setColor(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { rgba[0] = x; rgba[1] = y; rgba[2] = z; rgba[3] = w; }
             void setColor(int ix) { for (int i=0;i<4;i++) rgba[i] = mainColors[ix][i]; }

             CoordF cGetColor() { return CoordF(rgba[0], rgba[1], rgba[2]); }

             void setRed(GLfloat val) { rgba[0] = val; }
             void setGreen(GLfloat val) { rgba[1] = val; }
             void setBlue(GLfloat val) { rgba[2] = val; }
             void setAlpha(GLfloat val) { rgba[3] = val; }
             
             GLfloat getRed() { return rgba[0]; }
             GLfloat getGreen() { return rgba[1]; }
             GLfloat getBlue() { return rgba[2]; }
             GLfloat getAlpha() { return rgba[3]; }
             
             void bind() { glColor4fv( rgba ); }
             
             void renderStart() { bind(); }
             void renderFinish() { glColor4f(1,1,1,1); }

};

#endif
